package com.flow.asyncflow.core.entity.autooperation;

public abstract class AutoOperationAbstract {
//
//    /**
//     * 页面执行元素集合
//     */
//    private List<AutoOperationNode> elList = new ArrayList<>();
//
//    /**
//     * 页码
//     */
//    public PageNumberEnum pageNumber = PageNumberEnum.One;
//
//    /**
//     * 当前页监听的返回结果
//     */
//    public Map<String, APIResponse> monitorResults = new HashMap<>();
//
//    /**
//     * 当前页下载流集合
//     */
//    public Map<String, InputStream> downLoadInputStream = new HashMap<>();
//    /**
//     * 当前页下http返回集合
//     */
//    public Map<String, HttpClientResponse> httpResponseMap = new HashMap<>();
//    /**
//     * 是否需要录制页面脚本
//     */
//    public boolean recordJs = false;
//
//    public Page page = null;
//
//    public AutoOperationContext autoOperationContext = null;
//
//    /**
//     * 设置页面常量元素
//     */
//    public abstract void setPageInfo();
//
//    //region 执行多个操作事件
//
//    /**
//     * 执行多个操作事件
//     *
//     * @param asyncFlowContext      上下文
//     * @param autoOperationContext  填报上下文
//     * @param autoOperationAbstract 当前类
//     * @return 执行结果
//     */
//    public AsyncFlowNodeResponse executeOperationEvent(AsyncFlowContext asyncFlowContext, AutoOperationContext autoOperationContext, AutoOperationAbstract autoOperationAbstract) {
//        AsyncFlowNodeResponse asyncFlowNodeResponse = new AsyncFlowNodeResponse(200, "成功");
//        autoOperationAbstract.setPageInfo();
//        String fileName = autoOperationAbstract.getClass().getSimpleName();
//        if (StringUtils.isBlank(autoOperationContext.getOperator())) {
//            asyncFlowNodeResponse.setCode(100);
//            asyncFlowNodeResponse.setMsg("操作人必传");
//        }
//        String screensStr = "";
//        //存在Playwright事件
//        if (hasPlaywrightEvent(elList)) {
//            this.page = PlaywrightBase.getPage(autoOperationContext);
//        }
//
//        this.autoOperationContext = autoOperationContext;
//        if (elList == null || elList.size() == 0) {
//            asyncFlowNodeResponse.setMsg("类" + fileName + "，中没有需要执行的元素，请检查elList中是否有元素");
//            return asyncFlowNodeResponse;
//        }
//        //是否录制脚本
//        if (recordJs) {
//            autoOperationContext.getPlaywrightInfo().setHeadless(false);
//            page.pause();
//        }
//        for (AutoOperationNode autoOperationNode : elList) {
//            autoOperationNode.setPageNumberEnum(pageNumber);
//            try {
//                //页面事件请求
//                if (autoOperationNode.getEvent() == AutoOperationEvent.Click
//                        || autoOperationNode.getEvent() == AutoOperationEvent.Input
//                        || autoOperationNode.getEvent() == AutoOperationEvent.Check
//                        || autoOperationNode.getEvent() == AutoOperationEvent.ImplementJs
//                        || autoOperationNode.getEvent() == AutoOperationEvent.Select
//                        || autoOperationNode.getEvent() == AutoOperationEvent.Refresh
//                        || autoOperationNode.getEvent() == AutoOperationEvent.Open
//                        || autoOperationNode.getEvent() == AutoOperationEvent.UploadFile
//                        || autoOperationNode.getEvent() == AutoOperationEvent.PageCheck
//                        || autoOperationNode.getEvent() == AutoOperationEvent.SelectForLabel
//                        || autoOperationNode.getEvent() == AutoOperationEvent.DownloadFile
//                        || autoOperationNode.getEvent() == AutoOperationEvent.ClickWaitNavigation) {
//                    executeSingleOperationEvent(page, autoOperationNode);
//                    if (autoOperationNode.getEvent() == AutoOperationEvent.PageCheck
//                            && autoOperationNode.getEventState() == AutoOperationEventState.UnExecuted) {
//                        asyncFlowNodeResponse.setCode(100);
//                        asyncFlowNodeResponse.setMsg("通过页面检查元素不是当前页，不执行");
//                        break;
//                    }
//                } else if (autoOperationNode.getEvent() == AutoOperationEvent.MonitorRoute) {
//                    monitorRoute(autoOperationContext, autoOperationNode.getPath());
//                } else {
//                    //HTTP事件请求[已经执行过的无需再次执行]
//                    if (autoOperationNode.getEventState() != AutoOperationEventState.Executed) {
//                        exeHttpEvent(autoOperationNode);
//                        autoOperationNode.setEventState(AutoOperationEventState.Success);
//                    }
//                }
//            } catch (Exception ex) {
//                if (asyncFlowContext != null) {
//                    AsyncFlowRequest asyncFlowRequest = asyncFlowContext.getAsyncFlowRequest(AsyncFlowRequest.class);
//                    String msg = AsyncFlowSendMsg.buildPlaywrightErrorMsg(asyncFlowRequest, ex, fileName, autoOperationNode.getName(), asyncFlowContext.getAsyncFlowInfo());
//                    AsyncFlowSendMsg.sendQYWXMsg(asyncFlowContext.getAsyncFlowInfo().getFlowMaintainName(), msg, asyncFlowContext.getAsyncFlowInfo().getNodeArmUrl());
//                    asyncFlowNodeResponse.setMsg("元素：" + autoOperationNode.getName() + "填表异常");
//                    asyncFlowNodeResponse.setCode(-100);
//                    ////页面截图&记录日志
//                    //screensStr = screensAndLog(asyncFlowContext, fileName);
//                    //AsyncFlowCommon_Log.AddAsyncFlowDetailLog(asyncFlowContext, fileName, "执行填表", elList, screensStr, true);
//                }
//                System.out.println(ex.toString());
//                //elList = new ArrayList<>();
//                //return asyncFlowNodeResponse;
//            }
//        }
//        //将页面cookie放到上下文中
//        addCookies(autoOperationContext, page, null);
//        //页面截图&记录日志
//        screensStr = screensAndLog(asyncFlowContext, fileName);
//        AsyncFlowCommon_Log.AddAsyncFlowDetailLog(asyncFlowContext, fileName, "执行填表", elList, screensStr, true);
//        elList = new ArrayList<>();
//        return asyncFlowNodeResponse;
//    }
//
//    //endregion
//
//    //region 私有方法
//    //region 执行单个元素事件
//
//    /**
//     * 执行单个元素事件
//     *
//     * @param page              页面
//     * @param autoOperationNode 单个元素信息
//     */
//    private void executeSingleOperationEvent(Page page, AutoOperationNode autoOperationNode) {
//
//
//        Stopwatch stopWatch = Stopwatch.createStarted();
//        String loadStr = autoOperationNode.getPath();
//        long timeCost = 0;
//        //判断是否可见
//        boolean doesItExist = true;
//        //一般执行JS的都是页面的隐藏域，元素肯定是不可见的，无需判断
//        if (!autoOperationNode.getEvent().equals(AutoOperationEvent.ImplementJs)
//                && !autoOperationNode.getEvent().equals(AutoOperationEvent.Refresh)
//                && !autoOperationNode.getEvent().equals(AutoOperationEvent.Open)) {
//            doesItExist = doesItExist(page, autoOperationNode);
//            page.waitForSelector(loadStr);
//        }
//        if (!doesItExist) {
//            autoOperationNode.setEventState(AutoOperationEventState.ElementNotFound);
//            timeCost = stopWatch.elapsed(TimeUnit.MILLISECONDS);
//            autoOperationNode.setTimeCost(timeCost);
//            return;
//        }
//
//
//        //等待制定时间
//        page.waitForTimeout(autoOperationNode.getWaitTime());
//
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Input)) {
//            page.fill(loadStr, autoOperationNode.getContent());
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.ClickWaitNavigation)) {
//            //等待导航结束
//            page.waitForNavigation(() -> {
//                page.locator(loadStr).click(); // Triggers a navigation with a script redirect
//            });
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Click)) {
//            page.click(loadStr);
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Check)) {
//            page.check(loadStr);
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.ImplementJs)) {
//            page.evaluate(autoOperationNode.getContent());
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Select)) {
//            page.click(loadStr);
//            //String query=String.format(loadStr+" option[value='%s']",autoOperationNode.getContent());
//            //// 将鼠标移动到指定选项值上
//            //ElementHandle option = page.querySelector(query);
//            //option.hover();
//            //option.click();
//            page.selectOption(loadStr, autoOperationNode.getContent());
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.SelectForLabel)) {
//            assertThat(page.locator(loadStr)).containsText(autoOperationNode.getContent());
//            page.selectOption(loadStr, new SelectOption().setLabel(autoOperationNode.getContent()));
//            int count = 0;
//            com.microsoft.playwright.Response waitForResponse = page.waitForResponse("**/*", () -> {
//            });
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Refresh)) {
//            page.reload();
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.Open)) {
//            page.navigate(autoOperationNode.getPageURL());
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.DownloadFile)) {
//            Download download = page.waitForDownload(() -> page.click(loadStr));
//            download.path();
//            InputStream inputStreamDownload = download.createReadStream();
//            InputStream inputStream = null;
//            try {
//                ByteArrayOutputStream baas = new ByteArrayOutputStream();
//                byte[] buffer = new byte[1024];
//                int len;
//                while ((len = inputStreamDownload.read(buffer)) > -1) {
//                    baas.write(buffer, 0, len);
//                }
//                baas.flush();
//                inputStream = new ByteArrayInputStream(baas.toByteArray());
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//            downLoadInputStream.put(loadStr, inputStream);
//            download.delete();
//        }
//        if (autoOperationNode.getEvent().equals(AutoOperationEvent.UploadFile)) {
//            byte[] bytes = FileUtil.imageUrlToByte(autoOperationNode.getContent());
//            assert bytes != null;
//            String type = FileUtil.getFileType(bytes);
//            String mimeType = getMimeType(type);
//            page.locator(loadStr).setInputFiles(new FilePayload(UUID.randomUUID() + "." + type, mimeType, bytes));
//        }
//        page.waitForLoadState(LoadState.LOAD);
//        page.waitForLoadState(LoadState.DOMCONTENTLOADED);
//        page.waitForLoadState(LoadState.NETWORKIDLE, new Page.WaitForLoadStateOptions().setTimeout(30000));
//        autoOperationNode.setEventState(AutoOperationEventState.Success);
//        timeCost = stopWatch.elapsed(TimeUnit.MILLISECONDS);
//        autoOperationNode.setTimeCost(timeCost);
//    }
//
//    //endregion
//    private boolean hasPlaywrightEvent(List<AutoOperationNode> elList) {
//        if (elList == null || elList.isEmpty()) {
//            return false;
//        } else {
//            return elList.stream().anyMatch(c -> c.getEvent().equals(AutoOperationEvent.Click)
//                    || c.getEvent().equals(AutoOperationEvent.Input)
//                    || c.getEvent().equals(AutoOperationEvent.Check)
//                    || c.getEvent().equals(AutoOperationEvent.ImplementJs)
//                    || c.getEvent().equals(AutoOperationEvent.Select)
//                    || c.getEvent().equals(AutoOperationEvent.Refresh)
//                    || c.getEvent().equals(AutoOperationEvent.Open)
//                    || c.getEvent().equals(AutoOperationEvent.UploadFile)
//                    || c.getEvent().equals(AutoOperationEvent.PageCheck)
//                    || c.getEvent().equals(AutoOperationEvent.SelectForLabel)
//                    || c.getEvent().equals(AutoOperationEvent.DownloadFile)
//                    || c.getEvent().equals(AutoOperationEvent.ClickWaitNavigation)
//                    || c.getEvent().equals(AutoOperationEvent.MonitorRoute));
//        }
//    }
//
//    //region 页面截图&记录日志
//
//    /**
//     * 页面截图&记录日志
//     *
//     * @param asyncFlowContext 上下文
//     * @param fileName         文件名
//     *                         re
//     */
//    private String screensAndLog(AsyncFlowContext asyncFlowContext, String fileName) {
//        String screensStr = "";
//        Stopwatch stopWatch = Stopwatch.createStarted();
//        Page page = this.page;
//        if (page == null) {
//            return "";
//        }
//        Page.ScreenshotOptions screenshotOptions = new Page.ScreenshotOptions();
//        screenshotOptions.setFullPage(true);
//        byte[] screenshot_bytes = page.screenshot(screenshotOptions);
//        String screenshot_Base64 = FileUtil.encode(screenshot_bytes);
//        long timeCost = stopWatch.elapsed(TimeUnit.MILLISECONDS);
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        autoOperationNode.setName("页面截图");
//        autoOperationNode.setEvent(AutoOperationEvent.Screens);
//        autoOperationNode.setPath(null);
//        autoOperationNode.setContent(null);
//        autoOperationNode.setWaitTime(0);
//        autoOperationNode.setEventState(AutoOperationEventState.Success);
//        autoOperationNode.setTimeCost(timeCost);
//        elList.add(autoOperationNode);
//        screensStr = "data:image/jpg;base64," + screenshot_Base64;
//        return screensStr;
//
//
//    }
//    //endregion
//
//    //region 获取MimeType
//
//    /**
//     * 获取MimeType
//     *
//     * @param type 文件类型
//     * @return MimeType
//     */
//    private String getMimeType(String type) {
//        String mimeType = "";
//        switch (type) {
//            case "jpg":
//            case "png":
//                mimeType = "image/" + type;
//                if (type.equals("jpg")) {
//                    mimeType = "image/JPEG";
//                }
//                break;
//            case "doc":
//                mimeType = "application/msword";
//                break;
//            case "pdf":
//                mimeType = "application/pdf";
//                break;
//            case "docx":
//                mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
//                break;
//        }
//        return mimeType;
//    }
//    //endregion
//
//    //region 判断元素是否存在
//
//    /**
//     * 判断元素是否存在
//     *
//     * @param page              页面
//     * @param autoOperationNode 元素信息
//     * @return 是否存在
//     */
//    private boolean doesItExist(Page page, AutoOperationNode autoOperationNode) {
//        boolean doesItExist = false;
//        long waitTime = 10000;
//        int loadCount = 0;
//        String loadStr = autoOperationNode.getPath();
//        while (loadCount <= 0 && waitTime > 0) {
//            if (StringUtils.isNotBlank(loadStr)) {
//                loadCount = page.locator(loadStr).count();
//            } else {
//                break;
//            }
//            if (loadCount > 0) {
//                doesItExist = true;
//
//            }
//            try {
//                Thread.sleep(100);
//                waitTime = waitTime - 100;
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
//
//        }
//        return doesItExist;
//
//    }
//    //endregion
//
//    /**
//     * waitForResponse
//     *
//     * @param page      页面
//     * @param url       地址
//     * @param waitCount 等待次数
//     */
//    public void waitForResponse(Page page, String url, int waitCount) {
//        if (StringUtils.isBlank(url)) {
//            return;
//        }
//        for (int i = 0; i < waitCount; i++) {
//            com.microsoft.playwright.Response waitForResponse = page.waitForResponse(url, () -> {
//            });
//        }
//    }
//
//    private HttpClientResponse exeHttpEvent(AutoOperationNode autoOperationNode) {
//        CookieStore thisCookieStore = addCookieToHttpCookie(autoOperationContext, autoOperationNode);
//        autoOperationNode.getHttpClientRequest().setCookieStore(thisCookieStore);
//        //HTTP事件请求
//        HttpClientResponse httpClientResponse = HttpClientUtil.httpResponse(autoOperationNode.getHttpClientRequest());
//        autoOperationNode.setHttpClientResponse(httpClientResponse);
//        autoOperationNode.setEventState(AutoOperationEventState.Executed);
//        httpResponseMap.put(autoOperationNode.getName(), httpClientResponse);
//        addCookies(autoOperationContext, page, httpClientResponse.getCookieStore());
//        return httpClientResponse;
//    }
//
//    //region pageCookie增加到httpCookie
//
//    /**
//     * cookie增加到 http cookie
//     *
//     * @return CookieStore
//     */
//    private CookieStore addCookieToHttpCookie(AutoOperationContext autoOperationContext, AutoOperationNode autoOperationNode) {
//        CookieStore thisCookieStore = new BasicCookieStore();
//        for (AutoOperationContext.Cookie cookie : autoOperationContext.getCookieList()) {
//            BasicClientCookie cookieHttp = new BasicClientCookie(cookie.getName(), cookie.getValue());
//            if (StringUtils.isNotBlank(cookie.getDomain())) {
//                cookieHttp.setDomain(cookie.getDomain());
//            }
//            if (StringUtils.isNotBlank(cookie.getPath())) {
//                cookieHttp.setPath(cookie.getPath());
//            }
//            thisCookieStore.addCookie(cookieHttp);
//        }
//        if (autoOperationNode.getHttpClientRequest() != null && autoOperationNode.getHttpClientRequest().getCookieStore() != null) {
//            for (org.apache.http.cookie.Cookie cookie : autoOperationNode.getHttpClientRequest().getCookieStore().getCookies()) {
//                thisCookieStore.addCookie(cookie);
//            }
//        }
//        return thisCookieStore;
//    }
//    //endregion
//
//    //region httpCookie增加到pageCookie
//
//    /**
//     * httpCookie增加到pageCookie
//     *
//     * @param autoOperationContext autoOperationContext
//     * @param page                 page
//     */
//    private void addCookieToPageCookie(AutoOperationContext autoOperationContext, Page page) {
//        if (page == null) {
//            return;
//        }
//        List<com.microsoft.playwright.options.Cookie> pageCookies = new ArrayList<>();
//        for (AutoOperationContext.Cookie cookie : autoOperationContext.getCookieList()) {
//            if (StringUtils.isNotBlank(cookie.getDomain()) || StringUtils.isNotBlank(cookie.getPath())) {
//                com.microsoft.playwright.options.Cookie cookie1 = new com.microsoft.playwright.options.Cookie(cookie.getName(), cookie.getValue());
//                cookie1.setDomain(cookie.getDomain());
//                cookie1.setDomain(cookie.getPath());
//                pageCookies.add(cookie1);
//            }
//        }
//        page.context().addCookies(pageCookies);
//    }
//
//    //endregion
//
//    //region 将cookie添加到上下文
//
//    /**
//     * 将cookie添加到上下文
//     *
//     * @param autoOperationContext 上下文
//     * @param page                 页面
//     * @param httpCookieStore      httpCookie
//     */
//    private void addCookies(AutoOperationContext autoOperationContext, Page page, CookieStore httpCookieStore) {
//        if (page != null) {
//            List<Cookie> cookies = page.context().cookies();
//
//            if (cookies != null && cookies.size() > 0) {
//                for (Cookie cookie : cookies) {
//                    AutoOperationContext.Cookie newCookie1 = new AutoOperationContext.Cookie();
//                    newCookie1.setName(cookie.name);
//                    newCookie1.setValue(cookie.value);
//                    newCookie1.setPath(cookie.path);
//                    newCookie1.setDomain(cookie.domain);
//                    AutoOperationContext.Cookie oldCookie1 = autoOperationContext.getCookieList().stream().filter(c -> c.getName().equals(newCookie1.getName())).findFirst().orElse(null);
//                    if (oldCookie1 == null) {
//                        autoOperationContext.getCookieList().add(newCookie1);
//                    } else {
//                        if (oldCookie1.getDomain().equals(newCookie1.getDomain()) && oldCookie1.getPath().equals(newCookie1.getPath())) {
//                            continue;
//                        }
//                        oldCookie1.setValue(newCookie1.getValue());
//                    }
//
//                }
//            }
//        }
//        if (httpCookieStore != null) {
//            for (org.apache.http.cookie.Cookie cookie : httpCookieStore.getCookies()) {
//                if (StringUtils.isNotBlank(cookie.getName()) || StringUtils.isNotBlank(cookie.getValue())) {
//                    continue;
//                }
//                if (StringUtils.isNotBlank(cookie.getDomain()) || StringUtils.isNotBlank(cookie.getPath())) {
//                    AutoOperationContext.Cookie newCookie1 = new AutoOperationContext.Cookie();
//                    newCookie1.setName(cookie.getName());
//                    newCookie1.setValue(cookie.getValue());
//                    newCookie1.setPath(cookie.getPath());
//                    newCookie1.setDomain(cookie.getDomain());
//                    AutoOperationContext.Cookie oldCookie1 = autoOperationContext.getCookieList().stream().filter(c -> c.getName().equals(newCookie1.getName())).findFirst().orElse(null);
//                    if (oldCookie1 == null) {
//                        autoOperationContext.getCookieList().add(newCookie1);
//                    } else {
//                        if (oldCookie1.getDomain().equals(newCookie1.getDomain()) && oldCookie1.getPath().equals(newCookie1.getPath())) {
//                            continue;
//                        }
//                        oldCookie1.setValue(newCookie1.getValue());
//                    }
//                    autoOperationContext.getCookieList().add(newCookie1);
//                }
//            }
//        }
//    }
//    //endregion
//    //endregion
//
//    //region 关闭浏览器
//
//    /**
//     * 关闭浏览器
//     *
//     * @param autoOperationContext 上下文
//     */
//    public void closePage(AutoOperationContext autoOperationContext) {
//        Page page = PlaywrightBase.getPage(autoOperationContext);
//        BrowserContext browserContext = PlaywrightBase.getBrowserContext(autoOperationContext);
//        browserContext.close();
//        PlaywrightBase.delPage(autoOperationContext);
//
//    }
//    //endregion
//
//    //region 监听请求和返回
//    //private void executeOnRequest(AutoOperationContext autoOperationContext, String urlContains) {
//    //    Page page = PlaywrightBase.getPage(autoOperationContext);
//    //    page.onRequest(request -> {
//    //        if (request.url().contains(urlContains)) {
//    //            Map<String, Object> map = new HashMap<>();
//    //            request.response().body()
//    //            map.put("OnRequest", request);
//    //            monitorResults.put(urlContains, map);
//    //        }
//    //    });
//    //}
//
//    private void monitorRoute(AutoOperationContext autoOperationContext, String urlContains) {
//        Page page = PlaywrightBase.getPage(autoOperationContext);
//        page.route("**/*", route -> {
//            if (route.request().url().contains(urlContains)) {
//                APIResponse response = route.fetch();
//                Map<String, String> header;
//                header = response.headers();
//                monitorResults.put(urlContains, response);
//                route.fulfill(new Route.FulfillOptions().setResponse(response).setHeaders(header));
//            } else {
//                route.resume();
//            }
//        });
//    }
//
//
//    //endregion
//
//    //region 打开页面
//
//    /**
//     * 打开页面
//     *
//     * @param name    名称
//     * @param pageURL 页面地址
//     */
//    public void openPage(String name, String pageURL) {
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        autoOperationNode.setName(name);
//        autoOperationNode.setPageURL(pageURL);
//        autoOperationNode.setEvent(AutoOperationEvent.Open);
//        autoOperationNode.setPath(null);
//        autoOperationNode.setContent(null);
//        autoOperationNode.setWaitTime(0);
//        elList.add(autoOperationNode);
//        addElement("打开页面", AutoOperationEvent.Open, pageURL, "", 0);
//    }
//    //endregion
//
//    //region 刷新当前页
//
//    /**
//     * 刷新当前页
//     *
//     * @param name 名称
//     */
//    public void refreshPage(String name) {
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        autoOperationNode.setName(name);
//        autoOperationNode.setEvent(AutoOperationEvent.Refresh);
//        autoOperationNode.setPath(null);
//        autoOperationNode.setContent(null);
//        autoOperationNode.setWaitTime(0);
//        elList.add(autoOperationNode);
//    }
//    //endregion
//
//
//    //region 页面元素事件
//
//    public void addElement(AutoOperationNode autoOperationNode) {
//        elList.add(autoOperationNode);
//    }
//
//    //public void onRequest(String urlContains) {
//    //    addElement("监听请求", AutoOperationEvent.OnRequest, urlContains, "", 0);
//    //}
//
//    public void monitorRoute(String urlContains) {
//        addElement("监听路由", AutoOperationEvent.MonitorRoute, urlContains, "", 0);
//    }
//
//    /**
//     * 单击
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param waitTime    执行等待时间
//     */
//    public void click(String name, String elementPath, long waitTime) {
//        addElement(name, AutoOperationEvent.Click, elementPath, "", waitTime);
//    }
//
//    /**
//     * 单击并等待导航结束【用于点击跳转页面】
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param waitTime    执行等待时间
//     */
//    public void jumpClick(String name, String elementPath, long waitTime) {
//        addElement(name, AutoOperationEvent.ClickWaitNavigation, elementPath, "", waitTime);
//    }
//
//    /**
//     * 检查是否是当前页
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param waitTime    执行等待时间
//     */
//    public void pageCheck(String name, String elementPath, long waitTime) {
//        addElement(name, AutoOperationEvent.PageCheck, elementPath, "", waitTime);
//    }
//
//    /**
//     * 勾选、单选
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param waitTime    执行等待时间
//     */
//    public void check(String name, String elementPath, long waitTime) {
//        addElement(name, AutoOperationEvent.Check, elementPath, "", waitTime);
//    }
//
//    /**
//     * 文本框、文本域
//     *
//     * @param name           元素名称
//     * @param elementPath    元素路径【xpath、css选择器】
//     * @param elementContent 元素填充内容
//     * @param waitTime       执行等待时间
//     */
//    public void input(String name, String elementPath, String elementContent, long waitTime) {
//        addElement(name, AutoOperationEvent.Input, elementPath, elementContent, waitTime);
//    }
//
//    /**
//     * 下拉列表
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param value       需要选择的value
//     * @param waitTime    执行等待时间
//     */
//    public void select(String name, String elementPath, String value, long waitTime) {
//        addElement(name, AutoOperationEvent.Select, elementPath, value, waitTime);
//    }
//
//    /**
//     * 下拉列表
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param value       需要选择的Label值
//     * @param waitTime    执行等待时间
//     */
//    public void selectForLabel(String name, String elementPath, String value, long waitTime) {
//        addElement(name, AutoOperationEvent.SelectForLabel, elementPath, value, waitTime);
//    }
//
//    /**
//     * 执行JS
//     *
//     * @param name      元素名称
//     * @param jsContent Js内容
//     * @param waitTime  执行等待时间
//     */
//    public void executeJs(String name, String jsContent, long waitTime) {
//        addElement(name, AutoOperationEvent.ImplementJs, "", jsContent, waitTime);
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param fileUrl     文件URL
//     * @param waitTime    执行等待时间
//     */
//    public void uploadFile(String name, String elementPath, String fileUrl, long waitTime) {
//        addElement(name, AutoOperationEvent.UploadFile, elementPath, fileUrl, waitTime);
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param name        元素名称
//     * @param elementPath 元素路径【xpath、css选择器】
//     * @param waitTime    执行等待时间
//     */
//    public void downloadFile(String name, String elementPath, long waitTime) {
//        addElement(name, AutoOperationEvent.DownloadFile, elementPath, null, waitTime);
//    }
//
//
//    public void addElement(String elementName, AutoOperationEvent autoOperationEvent, String elementPath, String elementFillContent, long waitTime) {
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        autoOperationNode.setName(elementName);
//        autoOperationNode.setEvent(autoOperationEvent);
//        autoOperationNode.setPath(elementPath);
//        if (autoOperationEvent == AutoOperationEvent.Open) {
//            autoOperationNode.setPageURL(elementPath);
//        }
//        autoOperationNode.setContent(elementFillContent);
//        autoOperationNode.setWaitTime(waitTime);
//        executeSingleOperationEvent(page, autoOperationNode);
//        elList.add(autoOperationNode);
//    }
//    //endregion
//
//    //region 新增HTTP事件
//    public void addHttpGet(String name, String url, Map<String, Object> parameter, Map<String, String> heads) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, parameter, null, heads, HttpMethod.Get);
//        elList.add(autoOperationNode);
//    }
//
//    public HttpClientResponse exeHttpGet(String name, String url, Map<String, Object> parameter, Map<String, String> heads) {
//
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, parameter, null, heads, HttpMethod.Get);
//        HttpClientResponse httpClientResponse = exeHttpEvent(autoOperationNode);
//        elList.add(autoOperationNode);
//        return httpClientResponse;
//    }
//
//    private AutoOperationNode buildHttpAutoOperationNode(String name, String url, Map<String, Object> parameter, Object reqObj, Map<String, String> heads, HttpMethod httpMethod) {
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        HttpClientRequest httpClientRequest = new HttpClientRequest();
//        if (heads == null) {
//            heads = new HashMap<>();
//        }
//        httpClientRequest.setUrl(url);
//        httpClientRequest.setParameter(parameter);
//        httpClientRequest.setHeads(heads);
//        httpClientRequest.setHttpMethod(httpMethod);
//        autoOperationNode.setName(name);
//        if (reqObj != null) {
//            String json;
//            if (reqObj.getClass().getName().equals("java.lang.String")) {
//                json = (String) reqObj;
//            } else {
//                json = JSON.toJSONString(reqObj);
//            }
//            httpClientRequest.setReqJson(json);
//        }
//        if (httpMethod.equals(HttpMethod.Get)) {
//            autoOperationNode.setEvent(AutoOperationEvent.Get);
//        }
//        if (httpMethod.equals(HttpMethod.PostForm)) {
//            autoOperationNode.setEvent(AutoOperationEvent.PostForm);
//        }
//        if (httpMethod.equals(HttpMethod.Put)) {
//            autoOperationNode.setEvent(AutoOperationEvent.Put);
//        }
//        if (httpMethod.equals(HttpMethod.PostJson)) {
//            autoOperationNode.setEvent(AutoOperationEvent.PostJson);
//        }
//        if (httpMethod.equals(HttpMethod.PostFile)) {
//            autoOperationNode.setEvent(AutoOperationEvent.PostFile);
//        }
//        autoOperationNode.setHttpClientRequest(httpClientRequest);
//        autoOperationNode.setPageNumberEnum(pageNumber);
//        return autoOperationNode;
//    }
//
//    public void addHttpPostForm(String name, String url, Map<String, Object> parameter, Map<String, String> heads) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, parameter, null, heads, HttpMethod.PostForm);
//        elList.add(autoOperationNode);
//    }
//
//    public HttpClientResponse exeHttpPostForm(String name, String url, Map<String, Object> parameter, Map<String, String> heads) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, parameter, null, heads, HttpMethod.PostForm);
//        HttpClientResponse httpClientResponse = exeHttpEvent(autoOperationNode);
//        elList.add(autoOperationNode);
//        return httpClientResponse;
//    }
//
//    public void addHttpPostJson(String name, String url, Object reqObj) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, null, reqObj, null, HttpMethod.PostJson);
//        elList.add(autoOperationNode);
//    }
//
//    public HttpClientResponse exeHttpPostJson(String name, String url, Object reqObj) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, null, reqObj, null, HttpMethod.PostJson);
//        HttpClientResponse httpClientResponse = exeHttpEvent(autoOperationNode);
//        elList.add(autoOperationNode);
//        return httpClientResponse;
//    }
//
//    public void addHttpPut(String name, String url, Object reqObj) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, null, reqObj, null, HttpMethod.Put);
//        elList.add(autoOperationNode);
//    }
//
//    public HttpClientResponse exeHttpPut(String name, String url, Object reqObj) {
//        AutoOperationNode autoOperationNode = buildHttpAutoOperationNode(name, url, null, reqObj, null, HttpMethod.Put);
//        HttpClientResponse httpClientResponse = exeHttpEvent(autoOperationNode);
//        elList.add(autoOperationNode);
//        return httpClientResponse;
//    }
//
//    public void addHttpPostFile(String name, String url, Map<String, Object> parameter, Map<String, String> heads, List<HttpClientRequest.FileInfo> fileInfoList) {
//        AutoOperationNode autoOperationNode = new AutoOperationNode();
//        HttpClientRequest httpClientRequest = new HttpClientRequest();
//        if (heads == null) {
//            heads = new HashMap<>();
//        }
//        httpClientRequest.setUrl(url);
//        httpClientRequest.setParameter(parameter);
//        httpClientRequest.setHeads(heads);
//        httpClientRequest.setFileInfoList(fileInfoList);
//        httpClientRequest.setHttpMethod(HttpMethod.PostFile);
//        autoOperationNode.setName(name);
//        autoOperationNode.setEvent(AutoOperationEvent.PostFile);
//        autoOperationNode.setHttpClientRequest(httpClientRequest);
//        autoOperationNode.setPageNumberEnum(pageNumber);
//        elList.add(autoOperationNode);
//    }
//    //endregion


}
